package com.bicon.botu.mall.order.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.bicon.botu.core.base.common.entity.BaseResult;
import com.bicon.botu.mall.order.dto.*;
import com.bicon.botu.mall.order.dto.OrderChildDto;
import com.bicon.botu.mall.order.dto.OrderDetailDto;
import com.bicon.botu.mall.order.dto.OrderTotalDto;
import com.bicon.botu.mall.order.entity.OrderChild;
import com.bicon.botu.mall.order.entity.OrderGoods;
import com.bicon.botu.mall.order.param.OrderDetailParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author 李双喜
 * @since 2018-05-14
 */
public interface IOrderChildService extends IService<OrderChild> {
    /**
     * 提交订单前查询
     *
     * @param jsonString json字符串
     * @return
     */
    OrderChildDto affirmOrder(String jsonString, String userId);

    /**
     * 计算商品的运费
     *
     * @param productJson 商品id和数量的集合
     * @param addressId   收货省份名称
     * @return
     */
    Double freightCalculate(String productJson, String addressId);


    /**
     * json字符串
     *
     * @param jsonString json字符串
     * @return
     */
    BaseResult commitOrder(String jsonString);

    /**
     *
     * @param userId
     * @param orderGoodsList
     * @param remark
     */
    void insertOrderRecord(String userId, List<OrderGoods> orderGoodsList, String remark);

    /**
     * 根据总订单id删除订单
     *
     * @param id 总订单id
     * @return
     */
    Boolean deleteMaxOrder(String id);

    /**
     * 查询订单详情接口
     *
     * @param orderGoodsId 分组订单id
     * @return
     */
    OrderDetailDto selectDetail(String orderGoodsId);

    /**
     * web查询订单详情接口
     *
     * @param orderGoodsId 分组订单id
     * @return
     */

    BaseResult selectOrderDetail(String orderGoodsId);

    /**
     * 统计订单信息
     *
     * @param storeId 店铺id
     * @return
     */
    OrderTotalDto selectOrderTotal(String storeId);

    /**
     * 查询用户昵称
     *
     * @param userId 用户id
     * @return
     */

    String checkName(String userId);

    /**
     * 根据订单ID 查询子订单商品列表
     *
     * @param orderGoodsId
     * @return
     */
    Page<ChildAndDetailDto> getOrderInfoByOrderGoodsId(Page<ChildAndDetailDto> page, String orderGoodsId);

    /**
     * 根据订单ID 获得商品价格总和
     *
     * @param orderGoodsId
     * @return
     */
    public double getSumTotalPrice(String orderGoodsId);

    /**
     * 订单支付接口
     *
     * @param userId     转账人
     * @param maxOrderId 多个分组订单id
     * @param channel    支付类型 0余额 1 支付宝 2微信
     * @param storeId    接收人
     * @param password   密码
     * @return
     */
    BaseResult pay(String userId, String maxOrderId, String channel, String storeId, String password);


    /**
     * 根椐订单ID获得其子订单个数及已评价的子订单总数
     *
     * @param orderGoodsId
     * @return
     */
    public Map<String, Long> getEvaluateState(String orderGoodsId);

    /**
     * 根据子订单ID集合，修改订单评价状态
     *
     * @param orderChildIds
     * @return
     */
    public boolean updateEvaluateState(@Param("list") List<String> orderChildIds);

    /**
     * 计算和更新预订单运费信息
     *
     * @param orderGoodList 分组订单Id列表
     * @return
     */
    public OrderChildDto freightCalculate(List<OrderDetailParam> orderGoodList);


    /**
     * 计算和更新预订单运费信息
     *
     * @param orderGoodsIds 分组订单Id列表
     * @param province     省份
     * @return
     */
    public OrderChildDto updatefreight(List<String> orderGoodsIds, String province);

    /**
     * 增加销量
     *
     * @param orderGoodId 订单id
     */
    public void addSales(String orderGoodId);

}
